package 多线程;

import java.util.concurrent.locks.LockSupport;

/**
 * 该类用于实现A、B、C三个字母的交替打印。
 * 使用LockSupport实现线程间的同步，确保按顺序打印。
 * 时间复杂度：O(n)，空间复杂度：O(1)
 */
public class PrintABCUsingLockSupport {
    
    private static Thread threadA, threadB, threadC; // 定义三个线程

    /**
     * 主方法，启动三个线程分别打印A、B、C。
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        threadA = new Thread(() -> {
            for(int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName()); // 打印当前线程名称
                LockSupport.unpark(threadB); // 唤醒线程B
                LockSupport.park(); // 阻塞当前线程
            }
        }, "a"); // 线程A
        threadB = new Thread(() -> {
            for(int i = 0; i < 10; i++) {
                LockSupport.park(); // 阻塞当前线程
                System.out.println(Thread.currentThread().getName()); // 打印当前线程名称
                LockSupport.unpark(threadC); // 唤醒线程C
            }
        }, "b"); // 线程B
        threadC = new Thread(() -> {
            for(int i = 0; i < 10; i++) {
                LockSupport.park(); // 阻塞当前线程
                System.out.println(Thread.currentThread().getName()); // 打印当前线程名称
                LockSupport.unpark(threadA); // 唤醒线程A
            }
        }, "c"); // 线程C

        threadA.start(); // 启动线程A
        threadB.start(); // 启动线程B
        threadC.start(); // 启动线程C
    }
}
